Asynchronous Programming হল এমন একটি প্রোগ্রামিং পদ্ধতি যেখানে কোড একে অপরের সাথে সিঙ্ক্রোনাইজ হয়ে না চলতে পারে, বরং একাধিক কাজ বা অপারেশন সেগুলি সম্পন্ন হওয়ার জন্য অপেক্ষা না করে একসাথে চলে। এটি সিস্টেমের পারফরম্যান্স উন্নত করতে সাহায্য করে, বিশেষ করে যখন কোনো আই/ও (Input/Output) অপারেশন, যেমন ডেটাবেস কুয়েরি, ফাইল সিস্টেমের সাথে কাজ বা নেটওয়ার্ক রিকোয়েস্টের মতো সময়সাপেক্ষ কাজ করতে হয়।
এটি non-blocking প্রক্রিয়া ব্যবহার করে, যার মানে হল যে কোনো অপারেশন সম্পন্ন না হওয়া পর্যন্ত অন্যান্য কাজ আটকে থাকে না, বরং এগুলি পাশাপাশি চলে।
১. Synchronous vs Asynchronous
- Synchronous Programming: যখন একটি কাজ সম্পন্ন না হওয়া পর্যন্ত পরবর্তী কাজ শুরু হয় না, তখন এটি সিনক্রোনাস (Synchronous) প্রোগ্রামিং। এতে একে একে কাজগুলো সম্পন্ন হয়, এবং পরবর্তী কাজ পূর্ববর্তী কাজের উপর নির্ভর করে।
- Asynchronous Programming: এখানে, একাধিক কাজ একসাথে চলতে পারে। কোনো একক কাজের জন্য অন্য কাজ থেমে থাকে না। আপনি যদি একটি আই/ও অপারেশন করেন, তবে সেই অপারেশনটি শেষে হতে না হতেই অন্য কাজ চলতে থাকে এবং ফলস্বরূপ সময় সাশ্রয় হয়।
উদাহরণ:
Synchronous:
console.log("Start"); console.log("Processing..."); console.log("Done");Asynchronous:
console.log("Start"); setTimeout(() => { console.log("Processing..."); }, 2000); // 2 সেকেন্ড পর "Processing..." প্রদর্শিত হবে console.log("Done");
এখানে, Synchronous উদাহরণে সব কনসোলে একে একে প্রদর্শিত হয়, কিন্তু Asynchronous উদাহরণে setTimeout ফাংশনটি 2 সেকেন্ড পর কলব্যাক ফাংশন চালাবে, এবং তার আগে "Done" দেখাবে।
২. Callbacks (কলব্যাক)
Callback হল এমন একটি ফাংশন যা অন্য একটি ফাংশনের মধ্যে পাস করা হয় এবং সেই ফাংশনটি তার কার্য সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি চালায়।
Asynchronous প্রোগ্রামিংয়ে, কলব্যাক ফাংশন অত্যন্ত গুরুত্বপূর্ণ। যেমন, নেটওয়ার্ক রিকোয়েস্ট বা টাইমিং ইভেন্টগুলির পরে কলব্যাক ফাংশনটি কল করা হয়।
উদাহরণ:
console.log("Start");
setTimeout(() => {
console.log("Processing...");
}, 2000); // 2 সেকেন্ড পর
console.log("Done");এখানে, setTimeout একটি অ্যাসিনক্রোনাস ফাংশন যা কলব্যাক ফাংশনকে 2 সেকেন্ড পর চালাবে।
৩. Promises
Promises হল একটি আধুনিক ধারণা যা Asynchronous প্রোগ্রামিং সহজ এবং আরো পরিস্কার করে তোলে। একটি প্রমিস একটি ভবিষ্যত সময়ে কোনো কাজের সফল বা ব্যর্থ ফলাফল নিশ্চিত করার একটি উপায়। এটি Pending, Resolved বা Rejected অবস্থায় থাকতে পারে।
Promise উদাহরণ:
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Operation successful!");
} else {
reject("Operation failed!");
}
});
promise
.then((message) => {
console.log(message); // 'Operation successful!'
})
.catch((message) => {
console.log(message); // 'Operation failed!'
});এখানে, প্রমিসটি একটি অ্যাসিনক্রোনাস অপারেশন যা সফল হলে resolve() এবং ব্যর্থ হলে reject() চালাবে। then() মেথড সফল হলে এবং catch() মেথড ব্যর্থ হলে কলব্যাক ফাংশনগুলি চালায়।
৪. Async/Await
Async/Await হল Promises এর উপর ভিত্তি করে একটি নতুন সিনট্যাক্স যা Asynchronous কোড লেখাকে আরো সহজ করে তোলে। async ফাংশনটি একটি প্রমিস রিটার্ন করে এবং await অপারেটরটি প্রমিসের ফলাফল পাওয়ার জন্য অপেক্ষা করে, তবে এটি ব্লকিং হয় না।
Async/Await উদাহরণ:
async function fetchData() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Data fetched!"), 2000);
});
let result = await promise; // এখানে promise সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করা হয়
console.log(result); // 'Data fetched!'
}
fetchData();এখানে, async ফাংশনটি একটি প্রমিস রিটার্ন করবে এবং await এটিকে সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে। await ব্যবহার করলে কোড আরও পড়তে সহজ হয় এবং asynchronous কোড লেখার সময় callback হেল বা "callback hell" থেকে মুক্তি পাওয়া যায়।
৫. Event Loop
Node.js এ Event Loop একটি গুরুত্বপূর্ণ কনসেপ্ট। এটি অ্যাসিনক্রোনাস অপারেশনগুলো পরিচালনা করে। যখন কোনো অ্যাসিনক্রোনাস কাজ (যেমন ফাইল পড়া, HTTP রিকোয়েস্ট) শুরু হয়, Node.js সেগুলি ইনিশিয়েট করে এবং Event Loop এ একটি কলব্যাক ফাংশনকে পুশ করে। যখন অপারেশনটি সম্পন্ন হয়, তখন Event Loop কলব্যাক ফাংশনটি চালায়।
এটি Node.js এর non-blocking মেকানিজমকে সমর্থন করে এবং নিশ্চিত করে যে একসাথে একাধিক কাজ চলতে পারে।
সারাংশ
Asynchronous Programming হল এমন একটি প্রোগ্রামিং পদ্ধতি যা কোডের কার্যকারিতা বৃদ্ধি করে এবং প্রোগ্রামের পারফরম্যান্স উন্নত করে। এর মাধ্যমে একাধিক কাজ একসাথে চলতে পারে এবং একটি কাজের জন্য অন্য কাজ থেমে থাকে না।
- Callbacks: Asynchronous কাজের জন্য কলব্যাক ফাংশন ব্যবহৃত হয়।
- Promises: একটি আধুনিক পদ্ধতি যা কোডের কাঠামো উন্নত করে এবং প্রমিসের সফল বা ব্যর্থ ফলাফল সংগ্রহ করতে সাহায্য করে।
- Async/Await: Promise এর ওপর ভিত্তি করে কোড লেখাকে আরও সহজ এবং পরিষ্কার করে তোলে।
এই ধারণাগুলি Asynchronous প্রোগ্রামিংয়ের মূল ভিত্তি এবং এটি Node.js এর ইভেন্ট-ড্রিভেন আর্কিটেকচারের একটি অংশ।
Read more